package ar.uba.fi.algo3.tp3.modelo;

import java.io.Serializable;

import ar.uba.fi.algo3.titiritero.ObjetoVivo;
import ar.uba.fi.algo3.titiritero.Posicionable;
import java.io.Serializable;

abstract public class Personaje implements ObjetoVivo, Posicionable, Serializable {


    protected int x;
    protected int y;
    protected int velocidad;
    protected Direccion direccion;
    protected Mapa mapa;
    protected Direccion direccionFutura;

    public Personaje(int x, int y, Mapa mapa) {
        this.x = x;
        this.y = y;
        this.direccion = Direccion.DERECHA;
        this.mapa = mapa;
        this.velocidad = 3;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }


    public void setDireccion(Direccion direccion) {
        this.direccionFutura = direccion;
    }

    protected void verSiCambiaDeDireccion() {
        if (direccionFutura != null) {
            if (mapa.sePuedeIrA(x, y, direccionFutura, velocidad)) {
                this.direccion = direccionFutura;
                direccionFutura = null;
            }
        }
    }

    public void vivir() {
    	revisarSiPasoPorTunel();
        verSiCambiaDeDireccion();
        if (mapa.sePuedeIrA(x, y, direccion, velocidad)) {
            if (this.direccion == Direccion.ABAJO) {
                y += velocidad;
            }
            if (this.direccion == Direccion.ARRIBA) {
                y -= velocidad;
            }
            if (this.direccion == Direccion.IZQUIERDA) {
                x -= velocidad;
            }
            if (this.direccion == Direccion.DERECHA) {
                x += velocidad;
            }
            
        }
    }

    private void revisarSiPasoPorTunel() {
        if (x > 480) {
            x = 0;
        } else if (x < 0) {
            x = 480;
        }      
    }
}
